package lbj.cyw.dp;
/*
*309. 最佳买卖股票时机含冷冻期
*
* 四种状态 :
*   1. 达到买入与保持买入
*   2. 保持卖出
*   3. 达到卖出(跟保持卖出分开是因为此操作会带了冷冻期)
*   4. 达到冷冻期
*
*
* */
public class MaxProfit309 {
    public int maxProfit(int[] prices) {
        int n=prices.length;
        if(n==0){
            return 0;
        }
        int[][] dp=new int[n][4];
        dp[0][0]=-prices[0];
        for(int i=1;i<n;i++){
            //1. 达到买入与保持买入
            dp[i][0]=Math.max(dp[i-1][0],Math.max(dp[i-1][1],dp[i-1][3])-prices[i]);
            //2. 保持卖出:  前一天卖出与前一天冷冻期的最大值
            dp[i][1]=Math.max(dp[i-1][1],dp[i-1][3]);
            //3. 达到卖出
            dp[i][2]=dp[i-1][0]+prices[i];
            //4. 达到冷冻期
            dp[i][3]=dp[i-1][2];
        }
        return Math.max(Math.max(dp[n-1][1],dp[n-1][2]),dp[n-1][3]);
    }
}
